from flask_socketio import emit, join_room, leave_room
from config import DEFAULT_ROOM_ID
from rating_system import load_movie_ratings, get_current_movie_ratings
from video_handler import room_info

# 处理连接事件
def handle_connect():
    print('客户端已连接')

# 处理加入房间事件
def handle_join(socketio, request):
    join_room(DEFAULT_ROOM_ID)
    # 发送房间当前状态给新加入的用户
    socketio.emit('room_status', room_info, to=request.sid)
    
    # 发送当前评分信息（直接从文件加载，确保准确性）
    if room_info['video_filename']:
        ratings_data = load_movie_ratings(room_info['video_filename'])
    else:
        # 如果没有当前视频，返回默认评分
        ratings_data = {
            'overall': 0,
            'plot': 0,
            'actors': 0,
            'sound': 0,
            'count': 0
        }
    
    socketio.emit('rating_update', ratings_data, to=request.sid)
    print(f'用户加入房间: {DEFAULT_ROOM_ID}')

# 处理断开连接事件
def handle_disconnect():
    print('客户端已断开连接')

# 处理播放事件
def handle_play(data):
    current_time = data.get('current_time', 0)
    room_info['status'] = 'playing'
    room_info['current_time'] = current_time
    # 广播播放状态给房间内所有用户，不跳过当前用户，确保所有客户端状态一致
    emit('play', {'current_time': current_time}, room=DEFAULT_ROOM_ID)
    print(f'播放命令广播: {current_time}秒')

# 处理暂停事件
def handle_pause(data):
    current_time = data.get('current_time', 0)
    room_info['status'] = 'paused'
    room_info['current_time'] = current_time
    # 广播暂停状态给房间内所有用户，不跳过当前用户
    emit('pause', {'current_time': current_time}, room=DEFAULT_ROOM_ID)
    print(f'暂停命令广播: {current_time}秒')

# 处理进度调整事件
def handle_seek(data):
    current_time = data.get('current_time', 0)
    room_info['current_time'] = current_time
    # 广播进度更新给房间内所有用户
    emit('seek', {'current_time': current_time}, room=DEFAULT_ROOM_ID)
    print(f'进度调整广播: {current_time}秒')

# 处理状态同步事件
def handle_sync_status(data):
    """处理定期状态同步请求"""
    current_time = data.get('current_time', 0)
    paused = data.get('paused', False)
    
    # 更新房间信息
    room_info['current_time'] = current_time
    if paused:
        room_info['status'] = 'paused'
    else:
        room_info['status'] = 'playing'